import matplotlib.pyplot as plt
import matplotlib
import numpy as np

# 设置字体（SimHei 为黑体，适合中文）
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用黑体显示中文
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

def plot_line_chart():
    # 输入折线图的相关数据
    title = input("请输入折线图标题: ")
    xlabel = input("请输入横坐标标签: ")
    ylabel = input("请输入纵坐标标签: ")
    legend = input("请输入图例: ")

    num_points = int(input("请输入数据点个数: "))
    x_values = []
    y_values = []

    for i in range(num_points):
        x = float(input(f"请输入第{i+1}个数据点的横坐标: "))
        y = float(input(f"请输入第{i+1}个数据点的纵坐标: "))
        x_values.append(x)
        y_values.append(y)

    # 绘制折线图
    line_color = "blue"  # 折线图颜色
    point_color = "red"  # 数据点颜色

    plt.plot(x_values, y_values, label=legend, color=line_color)
    plt.scatter(x_values, y_values, color=point_color, s=50, zorder=5)  # 数据点加粗，但不添加图例

    plt.title(title)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    plt.legend()

    plt.grid(True)  # 可选：添加网格
    plt.show()


def plot_histogram():
    # 输入直方图的相关数据
    title = input("请输入直方图标题: ")
    xlabel = input("请输入横坐标标签: ")
    ylabel = input("请输入纵坐标标签: ")
    legend = input("请输入图例: ")

    num_points = int(input("请输入数据点个数: "))
    data = []

    for i in range(num_points):
        value = float(input(f"请输入第{i+1}个数据点的值: "))
        data.append(value)

    # 绘制直方图
    plt.hist(data, bins=10, label=legend)
    plt.title(title)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    plt.legend()

    plt.show()


def plot_pie_chart():
    # 输入扇形图的相关数据
    title = input("请输入扇形图标题: ")
    num_slices = int(input("请输入扇形的数量: "))

    labels = []
    values = []

    # 输入每个扇形的标签和对应的数值
    for i in range(num_slices):
        label = input(f"请输入第{i + 1}个扇形的标签: ")
        value = float(input(f"请输入第{i + 1}个扇形的数值: "))
        labels.append(label)
        values.append(value)

    # 计算比例
    total = sum(values)
    percentages = [value / total * 100 for value in values]

    # 绘制扇形图
    plt.pie(values, labels=labels, autopct=lambda p: f'{p:.1f}%', startangle=90)
    plt.title(title)
    plt.show()

def main():
    while True:
        print("请选择绘制的图形类型:")
        print("1. 折线图")
        print("2. 直方图")
        print("3. 扇形图")
        try:
            choice = int(input("请输入您的选择 (1/2/3): "))
            if choice == 1:
                plot_line_chart()
                print("正在生成折线图……")
                break
            elif choice == 2:
                plot_histogram()
                print("正在生成直方图……")
                break
            elif choice == 3:
                plot_pie_chart()
                print("正在生成扇形图……")
                break
            else:
                print("无效的选择，请输入 1、2 或 3。")
        except ValueError:
            print("无效的输入，请输入一个整数（1、2 或 3）。")

if __name__ == "__main__":
    main()